package com.example.demo.controller;

import com.example.demo.common.Result;
import com.example.demo.model.PersonalityType;
import com.example.demo.service.PersonalityTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * MBTI人格类型控制器
 * 
 * 负责处理与MBTI人格类型相关的HTTP请求，包括获取单个人格类型信息、
 * 根据代码查询人格类型、获取所有人格类型列表，以及人格类型的增删改功能。
 * 该控制器提供了MBTI人格类型数据的REST API接口，支持前端展示测试结果和人格类型详情。
 */
@RestController
@RequestMapping("/personality-types")
public class PersonalityTypeController {
    
    @Autowired
    private PersonalityTypeService personalityTypeService;

    /**
     * 根据ID获取人格类型
     *
     * @param id 人格类型ID
     * @return 包含人格类型信息的Result对象
     */
    @GetMapping("/{id}")
    public Result<PersonalityType> findById(@PathVariable("id") Integer id) {
        return Result.success(personalityTypeService.findById(id));
    }

    /**
     * 根据代码获取人格类型（如ISTJ, ENFP等）
     *
     * @param code MBTI人格类型代码（四字母代码，如ISTJ, ENFP等）
     * @return 包含人格类型信息的Result对象
     */
    @GetMapping("/code/{code}")
    public Result<PersonalityType> findByCode(@PathVariable("code") String code) {
        return Result.success(personalityTypeService.findByCode(code));
    }

    /**
     * 获取所有MBTI人格类型列表
     *
     * @return 包含所有人格类型列表的Result对象
     */
    @GetMapping
    public Result<List<PersonalityType>> findAllAtRoot() {
        return Result.success(personalityTypeService.findAll());
    }

    /**
     * 获取所有MBTI人格类型列表
     *
     * @return 包含所有人格类型列表的Result对象
     */
    @GetMapping("/list")
    public Result<List<PersonalityType>> findAll() {
        return Result.success(personalityTypeService.findAll());
    }

    /**
     * 创建新的人格类型
     *
     * @param personalityType 人格类型实体
     * @return 包含创建成功的人格类型信息的Result对象
     */
    @PostMapping
    public Result<PersonalityType> create(@RequestBody PersonalityType personalityType) {
        return Result.success(personalityTypeService.create(personalityType));
    }

    /**
     * 更新人格类型信息
     *
     * @param id 需要更新的人格类型ID
     * @param personalityType 更新后的人格类型信息
     * @return 包含更新后的人格类型信息的Result对象
     */
    @PutMapping("/{id}")
    public Result<PersonalityType> update(@PathVariable("id") Integer id, 
                                        @RequestBody PersonalityType personalityType) {
        personalityType.setId(id);
        return Result.success(personalityTypeService.update(personalityType));
    }

    /**
     * 删除指定人格类型
     *
     * @param id 需要删除的人格类型ID
     * @return 包含删除操作结果的Result对象
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteById(@PathVariable("id") Integer id) {
        return Result.success(personalityTypeService.deleteById(id));
    }
} 